import os
import PyPDF2
from collections import defaultdict
import shutil


def classify_and_move_files_by_type(folder_path, output_folder):
    # 创建一个字典来存储文件类型及其对应的文件路径
    file_dict = defaultdict(list)

    # 遍历文件夹及其子文件夹
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            # 获取文件路径
            file_path = os.path.join(root, file)
            # 获取文件扩展名（类型）
            file_type = os.path.splitext(file)[1].lower()  # 转换为小写以便统一处理
            # 将文件路径添加到对应类型的列表中
            file_dict[file_type].append(file_path)

    # 创建输出文件夹（如果不存在）
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 将文件按类型分类并移动到新的文件夹中
    for file_type, files in file_dict.items():
        # 创建子文件夹（以文件类型命名）
        type_folder = os.path.join(output_folder, file_type if file_type else "no_extension")
        if not os.path.exists(type_folder):
            os.makedirs(type_folder)

        # 移动文件到对应的子文件夹
        for file in files:
            # 获取文件名
            file_name = os.path.basename(file)
            # 目标路径
            dest_path = os.path.join(type_folder, file_name)
            # 移动文件
            shutil.move(file, dest_path)
            print(f"Moved: {file} -> {dest_path}")

    print("文件分类和移动完成！")

def sort_pdf_files_by_pages(root_dir, output_file):
    """
    收集指定目录下的所有PDF文件路径和页数，并按页数排序后写入文件
    
    参数:
    root_dir (str): 要搜索的根目录路径
    output_file (str): 输出文件路径
    """
    import os
    import PyPDF2
    
    # 收集所有PDF文件路径和页数
    pdf_files = []
    for dirpath, _, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.endswith(".pdf"):
                file_path = os.path.join(dirpath, filename)
                try:
                    # 打开PDF文件并读取页数
                    with open(file_path, "rb") as f:
                        reader = PyPDF2.PdfReader(f)
                        num_pages = len(reader.pages)
                        pdf_files.append((file_path, num_pages))
                except Exception as e:
                    print(f"无法读取文件 {file_path}: {e}")

    # 按页数排序（从大到小）
    pdf_files_sorted = sorted(pdf_files, key=lambda x: x[1], reverse=True)

    # 将结果写入txt文件
    with open(output_file, "w", encoding="utf-8") as f:
        for i, (file_path, num_pages) in enumerate(pdf_files_sorted, 1):
            f.write(f"{i}. {file_path} - {num_pages} 页\n")

# 使用示例
# root_dir = "/data/dingsiqi/简历分类/pdf"
# output_file = "sorted_pdf_files_by_pages.txt"
# sort_pdf_files_by_pages(root_dir, output_file)